package com.tywj.lib.businessweak.paging

import androidx.collection.ArrayMap
import com.tywj.lib.businessweak.entity.AbsPagingEntity
import com.chad.library.adapter.base.BaseQuickAdapter
import com.tywj.lib.net.retrofit.request.BaseRequest

/**
 * <pre>
 *     author : June Yang
 *     time   : 2020/05/12
 *     desc   : 分页加载数据的界面需要需要实现的接口(适应首页的分页)
 *     version: 1.0.0
 * </pre>
 */
interface IPagingViewSearch<D : AbsPagingEntity<T>, T> {

    /**
     * 获取RecyclerView的适配器
     */
    fun getRecyclerViewAdapter(): BaseQuickAdapter<T, *>

    /**
     * 获取网络请求
     */
    fun getRequest(): BaseRequest<*>

    /**
     * 获取网络请求参数
     */
    fun getRequestParams(): ArrayMap<String, String>

    /**
     * 获取网络加载更多请求参数 需要传递上次请求的最后一个数据的time时间戳
     */
    fun getRequestParamsLoadMore(): ArrayMap<String, String>

    /**
     * 执行网络请求
     * @param request 网络请求
     * @param successBlock 请求成功函数块
     * @param errorBlock 请求失败函数块
     * @param completeBlock 请求完成函数块
     */
    fun executeRequest(
        request: BaseRequest<*>,
        successBlock: (ArrayList<T>) -> Unit,
        errorBlock: (code: Int, message: String) -> Unit,
        completeBlock: () -> Unit
    )

    /**
     * 获取到数据之后会调用该方法，可以用来接收额外字段或者对列表数据进行处理
     * @param isRefresh 是否为刷新。true：刷新；false：加载更多。
     * @param data 获取到的数据
     * @return 是否要自行将列表中的数据添加 adapter。false：默认值，交给上层代码自动添加；true：自己将数据添加到 adapter。
     */
    fun onLoadSuccess(isRefresh: Boolean, data: ArrayList<T>): Boolean = false

    /**
     * 加载数据发生错误
     * @param isRefresh 是否为刷新。true：刷新；false：加载更多。
     * @param code 错误状态码
     * @param message 错误消息
     * @return 是否自行处理错误。false：默认值，上层代码处理；true：自行处理。
     */
    fun onLoadError(isRefresh: Boolean, code: Int, message: String): Boolean = false
}